<?php
//把富文本中的编码图片替换成文件


    function replace_base64_with_image($richText, $savePath) {
        // 正则表达式匹配Base64编码的图片
        $pattern = '/<img.*?src="data:image\/(\w+);base64,(.*?)".*?>/i';
        $matches = [];
        $images = [];

        // 执行匹配操作
        preg_match_all($pattern, $richText, $matches, PREG_SET_ORDER);

        // 遍历匹配结果
        foreach ($matches as $match) {
            // 提取图片类型和Base64编码的数据
            $imageType = $match[1];
            $base64Data = $match[2];

            // 移除Base64数据中的任何换行符或空格
            $base64Data = trim($base64Data);
            $base64Data = str_replace(array("\n", "\r"), '', $base64Data);
            
            // 解码Base64数据
            $imageData = base64_decode($base64Data);
            // 生成文件名和路径
            $fileName = 'extracted_image_' . time() . '.' . $imageType;
            // 存储路径
            $filePath = $savePath . $fileName;
            // 保存图片到文件
            if (file_put_contents($filePath, $imageData)) {
                // 记录成功的图片信息
                $images[] = array(
                    'type' => $imageType,
                    'name' => $fileName,
                    'path' => "/uploadfiles/" . $fileName
                );
                //避免存储为同一个文件名
                sleep(1);
            } else {
                // 记录失败的图片信息
                $images[] = 'Error saving image of type ' . $imageType . ' with base64 data: ' . $base64Data;
            }
        }
        //替换富文本图片路径
        // 加载HTML字符串为DOM对象
        $dom = new DOMDocument();
        @$dom->loadHTML('<?xml encoding="UTF-8">'.$richText);
        // 找到所有的<img>标签
        $image_group = $dom->getElementsByTagName('img');
        // 遍历<img>标签;
        foreach ($image_group as $k => $image) {
            // 获取src属性的值
            $src = $image->getAttribute('src');
            // 检查src是否以"data:image/"开头，如果是则替换为相对路径
            if (strpos($src, 'data:image/') !== false) {
                // 替换src属性的值
                $image->setAttribute('src', $images[$k]['path']);
            }
        }
        // 保存修改后的HTML字符串
        $richText = $dom->saveHTML();

        return $richText;
    }

?>